package com.monolithiot.sso.common.util;

import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotNull;

/**
 * 2018/12/10 Create by 郭文梁
 * SessionAttributeUtil
 * 会话属性工具类
 *
 * @author 郭文梁
 * @date 2018/12/10
 */
public class SessionAttributeUtil {
    /**
     * 保存信息到Session中
     *
     * @param session session
     * @param key     key
     * @param obj     保存到额内容
     */
    public static void put(HttpSession session, String key, Object obj) {
        session.setAttribute(key, obj);
    }

    /**
     * 从Session中获取指定类型的对象
     *
     * @param session 会话
     * @param clazz   类型
     * @param key     KEY
     * @param <T>     类型
     * @return 对象
     */
    @SuppressWarnings("unchecked")
    public static <T> T fromSession(HttpSession session, Class<T> clazz, String key) {
        Object attr = session.getAttribute(key);
        if (clazz.isInstance(attr)) {
            return (T) attr;
        }
        return null;
    }

    /**
     * 从Session中获取指定类型的对象，若对象不存在，则返回默认值
     *
     * @param session      会话
     * @param clazz        类型
     * @param key          Key
     * @param defaultValue 默认值
     * @param <T>          类型泛型
     * @return 对象
     */
    @NotNull
    public static <T> T fromSessionOrDefault(HttpSession session, Class<T> clazz, String key, T defaultValue) {
        T res = fromSession(session, clazz, key);
        return res == null ? defaultValue : res;
    }
}
